#include<iostream>
#include<sys/types.h>
#include<sys/wait.h>
#include<unistd.h>
#include<fcntl.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
using namespace std;

#define MAX_SIZE 1024
char command[MAX_SIZE];
int do_face()
{
	memset(command,0,MAX_SIZE);
	printf("minishell$ ");
	fflush(stdout);
	
	if(scanf("%[^\n]%*c",command)==0){
		getchar();
		return -1;
	}
	return 0;
}
char** do_parse(char* buffer)
{
	int argc=0;
	static char* argv[32];
	char* ptr=buffer;
	while(*ptr!='\0'){
		if(!isspace(*ptr)){
			argv[argc++]=ptr;
			while(*ptr!='\0'&&!isspace(*ptr)){
				ptr++;
			}
		}else{
			*ptr='\0';
			ptr++;
		}
	}
	argv[argc]=NULL;
	return argv;
}
int do_enev(char* buffer){
	char **argv=NULL;
	pid_t pid=fork();
	if(pid<0){
		perror("fork");
	}else if(pid==0){//child
		argv=do_parse(buffer);
		execvp(argv[0],argv);
		perror("execvp");
		exit(EXIT_FAILURE);
	}else{//parent
		waitpid(pid,NULL,0);
	}
	return 0;
}
int main()
{
	while(1){
		if(do_face()<0) continue;
		do_enev(command);
	}
	return 0;
}
